# 注意：config.get 获取的值得字符串，因此数据处理的时候根据字符串处理

import os
import configparser
import app_config
from .StorageObj import *

config = configparser.ConfigParser()
config_path = os.path.join(app_config.target_dir, "config.dat")
config.read(config_path, encoding='utf-8-sig')
print("config_file:%s" % config_path)

# 单例模式
mail = Mail()
setting = Settings()
commands = Commands()
appInfo = AppInfo()


# 保存一个对象（保存到文件中）
def save_one(obj):
    for name, value in vars(obj).items():
        config.set(obj.tag, name, str(value))
    try:
        config_file = open(config_path, 'w', encoding='utf-8')
        config.write(config_file)
        config_file.close()
    except Exception as result:
        print(result)


# 保存所有的对象（保存到文件中）
def save_all():
    setting.user_save = '1'
    save_one(mail)
    save_one(setting)
    save_one(commands)
    save_one(appInfo)


# 读取一个对象属性（从文件中）
def read_one(obj):
    for name, value in vars(obj).items():
        obj.__dict__[name] = config.get(obj.tag, name)


# 读取所有的对象（从文件中）
def read_all():
    read_one(mail)
    read_one(setting)
    read_one(commands)
    read_one(appInfo)


# 向配置文件中初始化一个对象
def init_one(obj):
    if not config.has_section(obj.tag):
        config.add_section(obj.tag)
    for name, value in vars(obj).items():
        if not config.has_option(obj.tag, name):
            config.set(obj.tag, name, str(value))
    try:
        config_file = open(config_path, 'w', encoding='utf-8')
        config.write(config_file)
        config_file.close()
    except Exception as result:
        print(result)


def init_all():
    init_one(mail)
    init_one(setting)
    init_one(commands)
    init_one(appInfo)
